[アップデート] AWS CodePipeline でステージの入力条件に「スキップ」が追加されました
いわさです。
数ヶ月前に、AWS CodePipeline(V2)ではパイプラインの各ステージが特定の条件を満たされた時のみ続行する方法を、入力条件および成功条件として定義することが出来るようになりました。
これまで入力条件としては「失敗」のみサポートされていたのですが、先日のアップデートで「スキップ」が追加されました。
ユースケースについてはあまりドキュメントに記載がないのですが、挙動から推察するに失敗ではなく成功ではあるがステージを特定条件でスキップしたい場合に使います。
例えば特定ブランチ以外ではインテグレーションテストのステージをスキップするとか、ステージはスキップするけどもパイプラインとしては成功したものとして扱いたいような時に効果を発揮すると思います。
設定方法
従来のステージ編集時に追加設定が可能で、以下の入力条件として「Skip」が追加されております。
Skip を追加したときのルール設定画面は次のような形です。複数のルールを追加することが出来るのですが、本日時点でスキップと失敗はどちらかしか追加出来ないようなのでご注意ください。
ただこれは役割が違うので両方設定出来ても良い気がしますけどね。
ルールの設定内容は失敗を設定する場合と同じですね。
ルール名とルールプロバイダーと各詳細な条件を設定します。
スキップの場合もルールプロバイダーは 4 種類選択出来そうに見えますが、実際には LambdaInvoke と VariableCheck のみがサポートされているようです。
For Entry conditions that use the Skip result to skip the stage if the condition fails, only the LambdaInvoke and VariableCheck rules are supported.
上記以外で設定してみると次のようにパイプライン保存時にエラーとなりました。
VariableCheck でスキップさせてみた
今回は VariableCheck ルールを使って特定条件時以外はスキップするように構成してみました。
VariableCheck ではパイプライン実行時の変数を参照して条件とすることが出来ます。
変数は独自で追加することも出来ますし、次のように提供されている変数もあります。
今回は main ブランチの場合はスキップするように設定してみました。
main ブランチに対してコミットをプッシュします。パイプラインがトリガーされました。
おっ、ビルドステージがスキップされましたね。入力条件で「失敗しました」となっています。これがスキップされた状態です。
で、パイプラインステータスを見てみるとこちらは成功として扱われています。
つまりステージのスキップが発生してもそれは想定されているものであり、パイプラインとしては正常に終了しているものとして扱われます。
そのため、ステージの上書きやロールバックもスキップの場合は出来ません。
ちなみにスキップではなく失敗の場合は次のようになりまして、失敗したステージの上書き条件を設定したり、ロールバックを行うことが出来ます。もちろんパイプラインステータスも失敗として扱われています。
さいごに
本日は AWS CodePipeline でステージの入力条件に「スキップ」が追加されたので使ってみました。
失敗とスキップの違いを覚えておくと使いこなせそうですね。
スキップは失敗と異なり、想定される正常動作でパイプラインとして成功と見なされること、そしてロールバックやオーバーライドなどの操作が出来ないことが特徴です。
そのため、文字通り想定されるスキップ条件を満たすために使われるものだと解釈して良さそうです。